CREATE OR REPLACE PROCEDURE SP_YJ_YXTSXMZF -- MODifICATION HisTORY -- Person Date Comments -- zhanghr 2013.05.14 去掉DCBZ00='0'条件 -- qks 2014.05.30 省人民:口腔科不自动作废,增加参数YJ_XMYXTS_YXKS控制 -- qks 2018.02.26 当参数YJ_XMYXTS值为2时,要求前天开单的医技单也要自动作废; for YJ9-20180226-001 -- liwm 2019.09.12 如果当前JKZT00为5的情况,则不作废申请单,保持申请单有效 YJ9-20190909-002 -- linshu 2020.06.02 清理医技带药品项目天数取清理处方项目的有效天数 by YF9-20200525-002 -- linshu 2020.07.07 增加游标c_YJYW00_CF清理已作废的处方开出的医技项目 by YF9-20200706-001 -- linshu 2020.08.11 修正语法;检验医技项目需要按照参数YJ_XMYXTS时间进行作废 by YJ9-20200810-002 -- linshu 2021.03.16 0元项目超过医技项目有效天数也要作废掉 by YJ9-20210315-001 as Vzxcgbz number; Vtsxx00 varchar2(200); Vxxxx00 varchar2(200); Vyxts00 number; V_MZCFBLTS number(3); --门诊处方报废天数 V_GHYXTS number(3); Vcounter number; --记数器 Vsysdate date; Ecustom exception; --错误变量 cursor c_YJYW00 IS select YJDJH0 from YJ_YW0000 a where KDRQ00>=least( to_char(sysdate-7,'YYYYMMDD'),decode(nvl(ZLDCCF,'0'),'0',to_char(sysdate-15,'YYYYMMDD'),to_char(sysdate-7,'YYYYMMDD'))) --20210525 lins and KDRQ00<=greatest(to_char(sysdate-7,'YYYYMMDD'),decode(nvl(ZLDCCF,'0'),'0',to_char(sysdate-15,'YYYYMMDD'),to_char(sysdate-7,'YYYYMMDD'))) --20210525 lins and XMZT00 in ('0','1','9') and JKZT00 <> '5' and ZJE000 >= 0 and MZZYBZ='0' --2019.09.09 已登记的不作废 JKZT00 <> '5' and not exists (select 1 from xt_xtcs00 where name00='YJ_XMYXTS_YXKS' and (instrb(','||trim(value0)||',',','||to_char(a.kdksbh)||',')>0 or instrb(','||trim(value0)||',',','||to_char(a.yjksbh)||',' )>0) ); --处方开出的医技项目 cursor c_YJYW00_CF IS select YJDJH0 from YJ_YW0000 a where KDRQ00>=least( to_char(sysdate-7,'YYYYMMDD'),to_char(sysdate-V_MZCFBLTS,'YYYYMMDD')) and KDRQ00<=greatest( to_char(sysdate-7,'YYYYMMDD'),to_char(sysdate-V_MZCFBLTS,'YYYYMMDD')) and BZ0000 in ('用药带出','每天一次','第二组起') and cfid00 is not null and yzcfid is not null and XMZT00 in ('0','1','9') and JKZT00 <> '5' and ZJE000 >= 0 and MZZYBZ='0' --2019.09.09 已登记的不作废 JKZT00 <> '5' and not exists (select 1 from xt_xtcs00 where name00='YJ_XMYXTS_YXKS' and (instrb(','||trim(value0)||',',','||to_char(a.kdksbh)||',')>0 or instrb(','||trim(value0)||',',','||to_char(a.yjksbh)||',' )>0) ); begin Vsysdate:=sysdate; --获取清除失效的门诊处方 select nvl(max(Trim(VALUE0)),1) into V_GHYXTS from XT_XTCS00 where NAME00='GHYXTS'; select nvl(max(Trim(VALUE0)),V_GHYXTS) into V_MZCFBLTS from XT_XTCS00 where NAME00='YF_MZCFBLTS'; select nvl(max(trim(VALUE0)),2) into Vyxts00 from XT_XTCS00 where NAME00='YJ_XMYXTS'; if Vyxts00 <> 0 then for row in c_YJYW00 loop SP_YJ_YW0000_XMZF00( row.YJDJH0, --处方流水号 0, --输入:操作员编码 0, --操作员科室 'N', --是否提交 Vzxcgbz, --执行成功标志 1成功 0失败 Vtsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Vxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); end loop; end if; --作废处方开出的医技项目 if V_MZCFBLTS <> 0 then for row in c_YJYW00_CF loop SP_YJ_YW0000_XMZF00( row.YJDJH0, --处方流水号 0, --输入:操作员编码 0, --操作员科室 'N', --是否提交 Vzxcgbz, --执行成功标志 1成功 0失败 Vtsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Vxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); end loop; end if; commit; exception when No_Data_Found then raise_application_error(-20001,substrb('没有找到数据!*'||sqlerrm||Vtsxx00,1,240)); when Ecustom then raise_application_error(-20010,substrb(Vtsxx00||'!*',1,240)); when others then raise_application_error(-20002,substrb(nvl(sqlerrm, '原因不明出错')||'!*',1,240)); end;